2013-03-17 3 views
1

Я новичок в использовании Scrapy, и я очень мало знаю о языке Python. До сих пор я установил Scrapy и прошел несколько учебников. После этого я пытался найти способ поиска по многим сайтам для одних и тех же данных. Моя цель - использовать Scarpy для поиска ссылок на «сообщения» и ссылки на несколько критериев поиска. В качестве примера я хотел бы искать сайты A, B и C. На каждом сайте я хотел бы узнать, есть ли у них «сообщение» о имени приложения X, Y и Z. Если у них есть какие-либо «сообщения» на X, Y, Z. Я бы хотел, чтобы он захватил ссылку на этот пост. Если было бы проще ... Он может сканировать каждый пост для нашего имени компании. Вместо X, Y, Z он будет искать содержимое каждой «записи» для [Пример названия компании]. Причина, по которой я делаю это так, заключается в том, что созданный JSON имеет ссылки на «сообщения», чтобы мы могли их просмотреть и, при необходимости, связаться с веб-сайтом.Используйте Scrapy для сокращения пиратства

Я нахожусь на Ubuntu 10.12, и мне удалось отказаться от сайтов, которые мы хотим, но я не смог сузить JSON до необходимой информации. Поэтому в настоящее время нам по-прежнему приходится проходить через сотни ссылок, чего мы хотим избежать, делая это. Причина, по которой мы получаем так много ссылок, состоит в том, что все обучающие программы, которые я нашел, предназначены для устранения определенного тега HTML. Я хочу, чтобы он искал тег, чтобы узнать, содержит ли он какую-либо часть названий приложений или имени пакета.

Нравится программа? Поделись с друзьями! Экономит время, но все еще не совсем то, что мы хотим. Часть этого, я думаю, это то, что я не ссылаюсь или не назову его правильно. Пожалуйста, помогите мне. Я потратил часы, пытаясь понять это.

posts = hxs.select("//div[@class='post']") 
     items = [] 
     for post in posts: 
      item = ScrapySampleItem() 
      item["title"] = post.select("div[@class='bodytext']/h2/a/text()").extract() 
      item["link"] = post.select("div[@class='bodytext']/h2/a/@href").extract() 
      item["content"] = post.select("div[@class='bodytext']/p/text()").extract() 
      items.append(item) 
     for item in items: 
      yield item 

Я хочу использовать это, чтобы сократить пиратство наших приложений для Android. Если мне удастся это выйти и найти нужные места для пиратства, я могу отправить сайт или хостинговую компанию всем ссылкам, которые мы хотим удалить. Согласно закону «Копировать право», они должны соответствовать, но они требуют, чтобы мы связывали их со всеми «сообщениями», которые они нарушают, поэтому разработчики приложений обычно не вписываются в подобные вещи. У них сотни приложений, поэтому поиск ссылок на ваши приложения занимает много часов работы.

Благодарим вас за помощь, которую вы можете предложить заранее. В конечном итоге вы будете помогать многим разработчикам приложений!

Грейди

ответ

0

Ваш XPath селекторы являются абсолютными. Они должны быть по отношению к предыдущему селектору (.)

posts = hxs.select('//div[@class='post']') 

for post in posts: 
    item = ScrapySampleItem() 
    item['title'] = post.select('.//div[@class="bodytext"]/h2/a/text()').extract() 
    item['link'] = post.select('.//div[@class="bodytext"]/h2/a/@href').extract() 
    item['content'] = post.select('.//div[@class="bodytext"]/p/text()').extract() 

    yield item 
+0

Я удалил пункт [ «содержание»], как я не хотел раздел контента. Как мне сказать, что искать X, Y и Z? Прямо сейчас он захватывает все ссылки, которые находятся в теле/​​h2/a. Благодарим вас за то, что помогли мне на один шаг ближе и исправили мой код! –

Смежные вопросы