总的来说,我对scrapy和python还是很陌生,但是我真的很想学习,为此我付出了很多努力!我正在尝试抓取eb5info.com,选择每个区域中心,然后复制每个区域中心的电话号码和电子邮件。但是,当我爬网时,它通知我0个网站已爬网。任何帮助将不胜感激!
这是我的蜘蛛:
from scrapy.item import Item, Field
class Eb5Item(Item):
description = Field()
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from parser_module.items import Eb5Item
class Eb5Spider(CrawlSpider):
name = 'eb5'
allowed_domains = ["eb5info.com"]
start_urls = ["http://eb5info.com/regional-centers"]
rules = (Rule(SgmlLinkExtractor(allow=[r'regional-centers/*$']), callback='parse_item'),)
def parse_item(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//ul/li/a/@href')
items = []
for site in sites:
item = Eb5Item()
item['url'] = response.url
item['phone'] = site.select("()").extract()
items.append(item)
return (items)
这是我的项目文件:
from scrapy.item import Item, Field
class Eb5Item(Item):
# define the fields for your item here like:
name = Field()
email = Field()
name = Field()
description = Field()
phone = Field()
pass
非常感谢!
最佳答案
诚然,为此使用Scrapy
有点过于强大。我个人将requests
与lxml
或BeautifulSoup
结合使用。
无论如何,这是您的代码的有效版本。我没有理会结果。随你(由你决定。
from scrapy.contrib.spiders import CrawlSpider
from scrapy.selector import Selector
from scrapy import Item, Field
from scrapy.http import Request
import urlparse
class Eb5Item(Item):
name = Field()
email = Field()
name = Field()
description = Field()
phone = Field()
url = Field()
class Eb5Spider(CrawlSpider):
name = 'eb5'
allowed_domains = ["eb5info.com"]
start_urls = ["http://eb5info.com/regional-centers/"]
def parse(self, response):
hxs = Selector(response)
sites = hxs.xpath('//ul/li/a/@href')
for site in sites:
yield Request(urlparse.urljoin("http://www.eb5info.com", site.extract()), callback=self.parse_item)
def parse_item(self, response):
hxs = Selector(response)
item = Eb5Item()
item['url'] = hxs.xpath("//dd/a/@href").extract()
# item[blah]...
print item['url']
return item
它的工作方式是
parse
从start_urls
获取链接。由于只有一个页面(start_urls
中的相同URL)包含所有链接,因此无需使用Rule
即可跟随其他页面。我们覆盖
parse
以从所述页面获取链接,然后使用Request
发出对parse_item
的回调。这意味着对于parse
找到的每个链接,我们都“进入”该链接并在其中执行parse_item
。从技术上讲,此级别的抓取很容易,并且实际上并没有资格进行爬网,这意味着
CrawlSpider
在此级别上是过大的。请注意,我使用的是最新版本的Scrapy,因此某些类和方法与您的不同。
关于python - 通过使用scrapy/python进行网络爬取来提取联系信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26664034/