scrapy爬取网址,进而爬取详情页问题

1、最容易出现的问题是爬取到的url大多为相对路径,如果直接将爬取到的url进行二次爬取就会出现以下报错:

  raise ValueError(‘Missing scheme in request url: %s‘ % self._url),该错误的意思是request的url为无效链接。

解决方法:将相对路径转换为绝对路径

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from pyquery import PyQuery
 4 from ..items import City10Item
 5 from scrapy.http import Request
 6 from scrapy.utils.response import get_base_url
 7 from urllib.parse import urljoin
 8
 9
10 class CitySpiderTest1Spider(scrapy.Spider):
11     name = ‘city_spider_test1‘
12     allowed_domains = [‘58.com‘]
13     start_urls = [‘https://cq.58.com/chuzu/‘]
14
15     def parse(self, response):
16         jpy=PyQuery(response.text)
17         li=jpy(‘body > div.mainbox > div > div.content > div.listBox > ul > li‘).items()
18         for i in li:
19             item=City10Item()
20             item[‘name‘]=i(‘div.des > h2 > a‘).text()
21             item[‘url‘]=i(‘div.des > h2 > a‘).attr(‘href‘) #爬取url,此时为相对路径
22             item[‘price‘]=i(‘div.listliright > div.money > b‘).text()
23             base_url = get_base_url(response) #获取相对路径前级地址
24             abs_url=urljoin(base_url,item[‘url‘]) #转换为绝对路径
25
26
27             if item[‘url‘]:
28                 yield Request(abs_url,
29                               callback=self.detail_parse, #回调详情页函数
30                               meta={‘item‘:item}, #将参数传递给meta
31                               priority=10,
32                               dont_filter=True #强制不过滤
33
34                 )
35
36     def detail_parse(self,response):
37         jpy = PyQuery(response.text)
38         item = response.meta[‘item‘]   #接收item
39         item[‘introduce_item‘] = jpy(‘body > div.main-wrap > div.house-detail-desc > div.main-detail-info.fl > div.house-word-introduce.f16.c_555 > ul > li:nth-child(1) > span.a2‘).text()   #提取房屋亮点
40         item[‘address‘] = jpy(‘body > div.main-wrap > div.house-basic-info > div.house-basic-right.fr > div.house-basic-desc > div.house-desc-item.fl.c_333 > ul > li:nth-child(6) > span.dz‘).text()   #房屋详情地址
41         item[‘phone_number‘] = jpy(‘body > div.main-wrap > div.house-basic-info > div.house-basic-right.fr > div.house-fraud-tip > div.house-chat-phone > span‘).text()   #电话号码
42         yield item

原文地址:https://www.cnblogs.com/zhz-8919/p/9715525.html

时间: 2024-08-12 05:31:45

scrapy爬取网址,进而爬取详情页问题的相关文章

Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情

Java爬虫爬取 天猫 淘宝 京东 搜索页和 商品详情 先识别商品url,区分平台提取商品编号,再根据平台带着商品编号爬取数据. 1.导包 <!-- 爬虫相关Jar包依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</version> </

Scrapy和MongoDB的应用---爬取

Scrapy是Python开发的一个快速.高层次的屏幕抓取和web抓取框架,用于抓取Web站点并从页面中提取结构化的数据.它最吸引人的地方在于任何人都可以根据需求方便的修改. MongoDB是现下非常流行的开源的非关系型数据库(NoSql),它是以“key-value”的形式存储数据的,在大数据量.高并发.弱事务方面都有很大的优势. 当Scrapy与MongoDB两者相碰撞会产生怎样的火花呢?与MongoDB两者相碰撞会产生怎样的火花呢?现在让我们做一个简单的爬取小说的TEST 1.安装Scra

Scrapy 通过登录的方式爬取豆瓣影评数据

Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来比较简单,主要分为以下几步: 1.创建一个项目 ==scrapy startproject Douban 得到一个项目目录如下: ├── Douban │   ├── init.py │   ├── items.py │   ├── pipelines.py │   ├── settings.py

通过python 爬取网址url 自动提交百度

通过python 爬取网址url 自动提交百度 昨天同事说,可以手动提交百度这样索引量会上去. 然后想了下.是不是应该弄一个py 然后自动提交呢?想了下.还是弄一个把 python 代码如下: import os import re import shutil REJECT_FILETYPE = 'rar,7z,css,js,jpg,jpeg,gif,bmp,png,swf,exe' #定义爬虫过程中不下载的文件类型 def getinfo(webaddress): #'#通过用户输入的网址连接

多线程爬虫爬取详情页HTML

注意:如果想爬取详情页的信息请按须添加方法 import requests import os import re import threading from lxml import etree #爬去详情页得HTML内容 class CnBeta(object): def get_congtent(self,url): #获取网页首页HTML信息 r = requests.get(url) #将获取得HTML页面进行解码 html = r.content.decode('utf-8') #返回

Python爬虫:新浪新闻详情页的数据抓取(函数版)

上一篇文章<Python爬虫:抓取新浪新闻数据>详细解说了如何抓取新浪新闻详情页的相关数据,但代码的构建不利于后续扩展,每次抓取新的详情页时都需要重新写一遍,因此,我们需要将其整理成函数,方便直接调用. 详情页抓取的6个数据:新闻标题.评论数.时间.来源.正文.责任编辑. 首先,我们先将评论数整理成函数形式表示: 1 import requests 2 import json 3 import re 4 5 comments_url = 'http://comment5.news.sina.c

Python爬虫的法律边界(二)小爬怡情,大爬over!

数据抓取的门槛越来越低,会点程序,或使用网络工具都可以薅点数据,新入行了不少爬虫选手,但是对抓取使用数据的法律风险可能缺少认识.尤其是从去年的<网络安全法>实施开始,被新闻公开报道的相关法律诉讼已有好几起. 有人会争议互联网本质是鼓励分享,很多UGC的网站内容还是用户贡献的,网络公开数据应该都可以使用. 我也希望是这样,但现实不是这样. 所以抓取数据前你最好看下被抓对象的知识产权申明,如果你是公司职员也关心下公司让你抓取数据的用途,多少了解下潜在风险. 以下是几个典型的爬虫选手爱光顾的网站知识

基于Casperjs的网页抓取技术【抓取豆瓣信息网络爬虫实战示例】

CasperJS is a navigation scripting & testing utility for the PhantomJS (WebKit) and SlimerJS (Gecko) headless browsers, written in Javascript. PhantomJS是基于WebKit内核的headless browser SlimerJS则是基于Gecko内核的headless browser Headless browser: 无界面显示的浏览器,可以用于

网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息及ISBN码

这一篇首先从allitebooks.com里抓取书籍列表的书籍信息和每本书对应的ISBN码. 一.分析需求和网站结构 allitebooks.com这个网站的结构很简单,分页+书籍列表+书籍详情页. 要想得到书籍的详细信息和ISBN码,我们需要遍历所有的页码,进入到书籍列表,然后从书籍列表进入到每本书的详情页里,这样就能够抓取详情信息和ISBN码了. 二.从分页里遍历每一页书籍列表 通过查看分页功能的HTML代码,通过class="current"可以定位当前页码所在span标签,此s