selector = '#app > div.common-content > div > div > div > ul > li:nth-child({}) > div > div.info > a.title'.format(i) 是什么作用
时间: 2023-08-07 10:13:18 浏览: 145
这段代码是用于生成一个 CSS 选择器字符串,用于定位页面中的某个特定元素。
这个选择器的含义是:选择 id 为 "app" 的元素下的第 i 个子元素,这个子元素是一个 ul 列表,列表中的每个 li 元素下都有一个 div 元素,这个 div 元素下有一个 class 为 "info" 的元素,这个元素下有一个 class 为 "title" 的 a 元素。
通俗地说,这个选择器用于定位一个网页中某个列表中的第 i 个元素的标题链接。
生成的选择器字符串中的 {} 部分是一个占位符,表示在实际使用时需要将 i 替换成具体的数字。通过使用字符串的 format 方法,可以将 i 的值动态地插入到选择器字符串中,生成一个完整的 CSS 选择器。
相关问题
browser.find_element_by_css_selector("#pane-body > div > div:nth-child(2) > div > div.vxe-table--render-wrapper > div.vxe-table--main-wrapper > div.vxe-table--body-wrapper.body--wrapper > table > tbody > tr.vxe-body--row.row--current > td.vxe-body--column.col_74.col--ellipsis > div > div > div > div > input").text获取不到文本
使用`.text`方法获取文本是无法获取到输入框中的文本的,因为输入框中的文本实际上是作为输入框的属性值存在的。如果你想获取输入框的文本,可以使用以下代码:
```python
element = browser.find_element_by_css_selector("#pane-body > div > div:nth-child(2) > div > div.vxe-table--render-wrapper > div.vxe-table--main-wrapper > div.vxe-table--body-wrapper.body--wrapper > table > tbody > tr.vxe-body--row.row--current > td.vxe-body--column.col_74.col--ellipsis > div > div > div > div > input")
text = element.get_attribute('value')
print(text)
```
这里使用了`get_attribute`方法来获取输入框的属性值,其中`'value'`表示获取输入框的值属性。
指出下面这段代码存在的问题import scrapy from scrapy import Request,Selector from TaobaoSpider.items import TaobaospiderItem class TaobaoSpider(scrapy.Spider): name = 'taobao' allowed_domains = ['taobao.com'] def start_requests(self): keywords = ['手机', '笔记本电脑', '键鼠套装'] for keyword in keywords: for page in range(2): url = f'https://s.taobao.com/search?q={keyword}&s={48 * page}' yield Request(url=url) # def parse_detail(self, response, **kwargs): # pass def parse(self, response, **kwargs): # 通过selenium帮助我们拿到淘宝页数据,在数据管道中实现 sel = Selector(response) selectors = sel.css('div.items > item.J_MouserOnverReq.item-ad > div.ctx-box.J_MouseEneterLeave.J_IconMoreNew') for selector in selectors: # type: Selector item = TaobaospiderItem() item['title'] = ''.join(selector.css('div.row.row-2.title > a> span::text').extract()).strip() item['price'] = selector.css('div.row.row-1.g-clearfix > div.price.g_price.g_price-highlight > strong::text').extract_first().strip() item['deal_count'] = selector.css('div.row.row-1.g-clearfix > div.deal-cnt::text').extract_first().strip() item['shop'] = selector.css('div.row.row-3.g-clearfix > div.shop > a > span:nth-child(2)::text').extract_first().strip() item['location'] = selector.css('div.row.row-3.g-clearfix > div.location::text').extract_first().strip() yield item
这段代码存在以下问题:
1. 第二行的 import Selector 应该改为 from scrapy.selector import Selector,因为 scrapy 模块中没有 Selector 类,Selector 类是在 scrapy.selector 模块中定义的。同时,import Request 也应该改为 from scrapy import Request。
2. 第三行的 from TaobaoSpider.items import TaobaospiderItem 没有问题,但需要确保 TaobaospiderItem 在当前路径下存在。
3. 在 start_requests 函数中,参数 page 的范围应该是从 0 开始,而不是从 2 开始,否则会漏掉第一页的数据。
4. 在 parse 函数中,selectors 的 CSS 选择器应该是 'div.items > div.J_MouserOnverReq',而不是 'div.items > item.J_MouserOnverReq.item-ad > div.ctx-box.J_MouseEneterLeave.J_IconMoreNew',因为 item 和 ctx-box 这两个类名可能会变化。另外,应该在选择器后面加上 :not(.item-service)',以排除广告。
5. 在 parse 函数中,item['price'] 可能为 None,需要做异常处理。
阅读全文