使用Scrapy抓取网页数据
我使用scrapy来抓取justdial.com,但代码似乎不起作用。请帮我解决这个问题。我使用命令“scrapy crawl justdial -o items.csv -t csv”从终端运行它。使用Scrapy抓取网页数据
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from justdial_sample.items import JustdialSampleItem
class MySpider(CrawlSpider):
name = "justdial"
allowed_domains = ["www.justdial.com"]
start_urls = ["https://www.justdial.com/"]
rules = (Rule (SgmlLinkExtractor(allow=("index\d00\.html",
),restrict_xpaths=('//p[@id="nextpage"]',))
, callback="parse_items", follow=True),
)
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select("//p")
items = []
for titles in titles:
item = JdItem()
item ["title"] = titles.select("a/text()").extract()
item ["link"] = titles.select("@/href").extract()
item.append(item)
return items
这是我使用的代码。
如果你能显示输出日志,它会更容易帮助你。
通常情况下,您应该添加正确的标题,如在浏览器中,等用户代理。您可以检查萤火虫中的所有标题,并且可以检查蜘蛛中的标题。
print response.request.headers
UPDATE: 你应该添加此行除了settings.py中
USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/53.0'
我需要10个声望才能发布图片。所以我给你一个驱动器链接。 –
https://drive.google.com/file/d/0B10eUYMamUyocjNvYl81WXk5ZGs/view?usp=drivesdk –
我已经做到了。它仍然不起作用 –
AFAIK justdial阻止谷歌的任何其他刮刀。它不仅仅通过['robots.txt'](https://us.justdial.com/robots.txt)文件进行限制,而且它们不允许IP地址。您可以尝试在scrapy中使用'USER_AGENT'字符串或尝试使用scrapy splash。 –